﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Web.Framework;
using WebAppPlanProduccion.Code;
using WebAppPlanProduccion.Code.Security;
using PlanProd.Contracts;
using PlanProd.Contracts.enums;

namespace WebAppPlanProduccion
{
    public partial class SiteMaster : BaseMasterPage
    {
        public override void PreLoad()
        {
            if (!DesignMode)
            {
                base.PreLoad();
                this.pnlMessages.CssClass = "pnlMessagesClass displayNone";
                this.txtMessages.Text = string.Empty;
                BuildMenu();
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (this.Page.User.Identity.IsAuthenticated)
                {
                    Label loginName = (Label)this.HeadLoginView.FindControl("lblLoginName");
                    loginName.Text = BaseWebPage.DisplayUserName;
                }

                List<string> cookieCompany = HttpHelper.GetCookieValues(MiscClass.CookieCompany, this.Request);

                if (cookieCompany.Count > 1)
                {
                    int companyId = Convert.ToInt32(cookieCompany[0]);                   

                    Control ctrlBienvenido = this.HeadLoginView.FindControl("lblPtoVtaBienvenido");
                    if (ctrlBienvenido != null)
                    {
                        Label lblBienvendioPtoVta = (Label)ctrlBienvenido;
                        lblBienvendioPtoVta.Text = cookieCompany[1];
                    }                  
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        public override void ShowMessage(string message, WebMessageType type)
        {
            ShowMessage("Mensaje", message, type);
        }

        public override void ShowMessage(string title, string message, WebMessageType type)
        {
            this.pnlMessages.CssClass = "pnlMessagesClass displayBlock";
            this.txtErrorTitle.Text = title;
            this.txtMessages.Text = message;
            if (type != WebMessageType.Error)
            {
                pnlError.CssClass = "errorPanelMessage";
            }
            else
            {
                pnlError.CssClass = "errorPanelError";
            }
        }

        public override void MakeMenuVisible(bool visible)
        {
            this.NavigationMenu.Visible = visible;
        }

        public override void BuildMenu()
        {
            if (this.NavigationMenu.Visible)
            {
                List<ReportingConfiguration> reportingConfigurationList = BasePage.GetReportingConfiguration(this.Application);

                if (HasPermissionFor(PlanProdSecurity.PEDIDOCOMERCIAL_VER))
                {
                    MenuItem PedidoComercialList = new MenuItem()
                    {
                        NavigateUrl = "~/App/PedidoComercialList.aspx",
                        Text = "Pedidos comerciales"
                    };

                    this.NavigationMenu.Items.Add(PedidoComercialList);
                }

                if (HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_VER))
                {

                    MenuItem PresupuestoProduccionList = new MenuItem()
                     {
                         NavigateUrl = "~/App/PresupuestoProduccionList.aspx",
                         Text = "Presupuestos de Producción"
                     };
                    this.NavigationMenu.Items.Add(PresupuestoProduccionList);

                    if (HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_CARGAMASIVA))
                    {
                        MenuItem PresupuestoProduccionCargaMasiva = new MenuItem()
                        {
                            NavigateUrl = "~/App/PresupuestoProduccionCargaMasiva.aspx",
                            Text = "Importación desde Excel"
                        };

                        PresupuestoProduccionList.ChildItems.Add(PresupuestoProduccionCargaMasiva);
                    }
                }

                if (HasPermissionFor(PlanProdSecurity.PLANPRODUCCION_VER))
                {
                    MenuItem PlanProduccionList = new MenuItem()
                     {
                         NavigateUrl = "~/App/PlanProduccionList.aspx",
                         Text = "Planes de Producción"
                     };

                    if (HasPermissionFor(PlanProdSecurity.PLANPRODUCCION_DESVIO_VER))
                    {
                        MenuItem DesvioList = new MenuItem()
                        {
                            NavigateUrl = "~/App/DesvioList.aspx",
                            Text = "Ver Desvíos"
                        };

                        PlanProduccionList.ChildItems.Add(DesvioList);
                    }

                    this.NavigationMenu.Items.Add(PlanProduccionList);
                }

                MenuItem DatosMaestro = new MenuItem()
                {
                    Text = "Datos Maestro",
                    Selectable = false
                };
                bool agregarDatosMaestro = false;

                if (HasPermissionFor(PlanProdSecurity.TEMPORADA_VER))
                {
                    MenuItem TemporadaList = new MenuItem()
                    {
                        NavigateUrl = "~/App/TemporadaList.aspx",
                        Text = "Temporadas"
                    };

                    DatosMaestro.ChildItems.Add(TemporadaList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.DESTINO_VER))
                {
                    MenuItem DestinoList = new MenuItem()
                    {
                        NavigateUrl = "~/App/DestinoList.aspx",
                        Text = "Destinos"
                    };

                    DatosMaestro.ChildItems.Add(DestinoList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.CAUSADESVIO_VER))
                {
                    MenuItem CausaDesvioList = new MenuItem()
                    {
                        NavigateUrl = "~/App/CausaDesvioList.aspx",
                        Text = "Causa de Desvios"
                    };

                    DatosMaestro.ChildItems.Add(CausaDesvioList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.PRODUCTO_VER))
                {
                    MenuItem ProductoList = new MenuItem()
                    {
                        NavigateUrl = "~/App/ProductoList.aspx",
                        Text = "Productos"
                    };

                    DatosMaestro.ChildItems.Add(ProductoList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.PROVEEDOR_VER))
                {
                    MenuItem ProveedorList = new MenuItem()
                    {
                        NavigateUrl = "~/App/ProveedorList.aspx",
                        Text = "Proveedores"
                    };

                    DatosMaestro.ChildItems.Add(ProveedorList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_VER))
                {
                    MenuItem IngresosDeProductoList = new MenuItem()
                    {
                        NavigateUrl = "~/App/IngresoDeProductoList.aspx",
                        Text = "Ingresos de Producto"
                    };

                    DatosMaestro.ChildItems.Add(IngresosDeProductoList);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.ADMINISTRAR_REPORTES))
                {
                    MenuItem administracionDeReportes = new MenuItem()
                    {
                        NavigateUrl = "~/App/ReportList.aspx",
                        Text = "Administración de Reportes"
                    };

                    DatosMaestro.ChildItems.Add(administracionDeReportes);
                    agregarDatosMaestro = true;
                }

                if (HasPermissionFor(PlanProdSecurity.ADMINISTRAR_REPORTSERVER))
                {
                    MenuItem administracionDeReportServer = new MenuItem()
                    {
                        NavigateUrl = "~/App/ReportServerList.aspx",
                        Text = "Administración de Servidor de Reportes"
                    };

                    DatosMaestro.ChildItems.Add(administracionDeReportServer);
                    agregarDatosMaestro = true;
                }

                MenuItem grupoRelacionProducto = new MenuItem()
                {                   
                    Text = "Administración de Relaciones de Producto",
                     Selectable = false
                };

                DatosMaestro.ChildItems.Add(grupoRelacionProducto);

                foreach (RelacionProductoEntidadMapeo mapeos in RelacionProductoEntidadMapeo.EntidadesGenericas)
                {
                    MenuItem relacionProductoItem = new MenuItem()
                    {
                        NavigateUrl = string.Format("~/App/RelacionProductoList.aspx?n={0}", mapeos.NombreEntidad),
                        Text = mapeos.DescripcionEntidad
                    };

                    grupoRelacionProducto.ChildItems.Add(relacionProductoItem);
                    agregarDatosMaestro = true;
                }

                if (agregarDatosMaestro)
                {
                    this.NavigationMenu.Items.Add(DatosMaestro);
                }

                MenuItem ReportesMenu = new MenuItem()
                {
                    Text = "Reportes"
                };

                this.NavigationMenu.Items.Add(ReportesMenu);

                foreach (ReportingConfiguration reportConfig in reportingConfigurationList)
                {
                    //NavigateUrl = "~/App/ReportingService.aspx?Reporte=Crm.Ar.OperacionesPorPDVConLineas",
                    //   Text = LocalizationProvider.Instance["Reporte.OperacionesPorPDVConLineas"]
                    if (HasPermissionFor(reportConfig.SecurityKey))
                    {
                        MenuItem ReporteOperacionesMenu = new MenuItem()
                        {
                            NavigateUrl = string.Format("~/App/ReportingService.aspx?Reporte={0}", reportConfig.Nombre),
                            Text = reportConfig.LocalizationKey
                        };

                        ReportesMenu.ChildItems.Add(ReporteOperacionesMenu);
                    }
                }

            }
        }
    }
}
